package utils

import (
	"fmt"
	"io"
	"log"
	"os"
	"path/filepath"
	"runtime/debug"
	"time"
)

// 错误输出字体显示红色
func Fatal(v any) {
	fmt.Printf("lark:\033[0;1;31m致命错误:\033[0m %v\n", v)
	//定位哪一行出了错误
	debug.PrintStack()
	os.Exit(1)
}

func MustNo(err error) {
	if err != nil {
		Fatal(err)
	}
}

/**
 * 复制文件
 * orgFilePath 原始文件
 * targetFilePath 目标文件
 */
func CopyFile(orgFilePath string, targetFilePath string) {
	// 打开源文件
	srcFile, err := os.Open(orgFilePath)
	if err != nil {
		panic(err)
	}
	defer srcFile.Close()

	// 创建目标文件
	dstFile, err := os.Create(targetFilePath)
	if err != nil {
		panic(err)
	}
	defer dstFile.Close()

	// 复制文件内容
	_, err = io.Copy(dstFile, srcFile)
	if err != nil {
		panic(err)
	}
}

// 保存日志
func SaveLog(info string) {
	// 获取当前工作目录
	currentDir, errs := os.Getwd()
	if errs != nil {
		log.Fatal(errs)
	}
	now := time.Now()
	// 方法1：直接获取年月日
	year, month, day := now.Date()
	fileName := fmt.Sprintf("%d-%d-%d", year, month, day)
	filePath := currentDir + "/log/" + fileName + ".txt"

	// 检查文件是否存在
	_, err := os.Stat(filePath)
	if os.IsNotExist(err) {
		// 文件不存在，创建并写入内容
		err = os.WriteFile(filePath, []byte(info), 0644)
		if err != nil {
			fmt.Println("创建文件失败：", err)
			return
		}
		// fmt.Println("文件已成功创建并写入")
	} else {
		// 文件存在，追加内容
		// 打开文件
		file, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY, 0644)
		if err != nil {
			log.Fatal(err)
		}
		defer file.Close()

		// 将内容追加到文件末尾
		_, err = file.Write([]byte(info))
		if err != nil {
			log.Fatal(err)
		}
	}
}
func DefaultOutputName(scriptPath string) string {
	base := filepath.Base(scriptPath)
	ext := filepath.Ext(base)
	if ext != "" {
		base = base[:len(base)-len(ext)]
	}
	return base
}
// 获取当前工作目录
func GetCurrentPath() string {
	// 获取当前工作目录
	currentDir, errs := os.Getwd()
	if errs != nil {
		log.Fatal(errs)
	}
	return currentDir
}